// backend/model.go
package main

import (
	"fmt"
	"time"

	"github.com/go-xorm/xorm"
)

// TrafficLog 1. 原始访问日志表（traffic_log）
type TrafficLog struct {
	Id         string    `xorm:"varchar(36) pk table:traffic_logs"` // 唯一ID（UUID）
	Ip         string    `xorm:"varchar(20)"`                       // 访问IP
	Framework  string    `xorm:"varchar(50)"`                       // 前端框架（Vue/React/Angular等）
	UserAgent  string    `xorm:"varchar(255)"`                      // 用户代理（UA）
	AccessTime time.Time `xorm:"datetime"`                          // 访问时间
	CreateTime time.Time `xorm:"datetime created"`                  // 记录创建时间

}

// 2. 统计结果表（traffic_stats）
// 存储PV、框架分布、UA分布等聚合数据
// xorm  "traffic_stats" 一对一映射
type TrafficStat struct {
	Id         string    `xorm:"varchar(36) pk "`  // 唯一ID（UUID） pk  主键
	StatTime   time.Time `xorm:"datetime"`         // 统计时间（按小时粒度）
	StatType   string    `xorm:"varchar(20)"`      // 统计类型（pv/framework/ua）
	StatKey    string    `xorm:"varchar(255)"`     // 统计维度Key（如框架名、UA）
	StatValue  int       `xorm:"int"`              // 统计值（数量）
	CreateTime time.Time `xorm:"datetime created"` // 记录创建时间 created 自动插入当前时间
}

// InitTables 初始化数据库表（自动创建不存在的表）
func InitTables(engine *xorm.Engine) error {
	// 创建原始日志表
	if err := engine.Sync2(new(TrafficLog)); err != nil {
		return fmt.Errorf("创建traffic_log表失败: %w", err)
	}
	// 创建统计结果表
	if err := engine.Sync2(new(TrafficStat)); err != nil {
		return fmt.Errorf("创建traffic_stats表失败: %w", err)
	}
	return nil
}
